package CutLoad.components
{
	import CutLoad.Base;
	import CutLoad.components.container.*;
	/**
	 * 表格容器
	 * @author smallerbird mail:smallerbird@gmail.com  site:www.mkigm.com QQ群:49983196
	 * 
	 */	
	public class CTable extends Base
	{
		private var container:ContainerT;
		private var rowH:Number;
		//背景
		protected var bakRender:CRender;
		//是否显示背景
		private var isShowBak:Boolean;
		//背景信息
		private var objBakConfig:Object
		//表格宽，高
		private var tableW:Number,tableH:Number;
		//
		/**
		 * 
		 * @param arrTitle 标题列表，格式：["标题1","标题2","标题3"...]
		 * @param rowH 单元格高
		 * @param tableW 表格宽
		 * @param arrWidth 表格每行宽的配置数组，[宽度1,宽度2...],注：可以为null,函数将自动生成。宽度值可以设为百分比，注意的是1为百分之百。详细说明请见:CutLoad.components.container.ContainerT.ini(..)方法说明.
		 * @param isShowBak 是否显示背景
		 * 
		 */		
		public function CTable(arrTitle:Array,rowH:Number,tableW:Number,arrWidth:Array=null,isShowBak:Boolean=true)
		{
			if(arrWidth!=null){
				if(arrTitle.length!=arrWidth.length) throw new Error("标题项数与自定义列宽项数不一直");
			}else{
				//如果没有自定义宽度
				arrWidth=new Array();
				var ptem:Number=tableW/arrTitle.length
				for(var i:Number=0;i<arrTitle.length;i++){
					arrWidth.push(ptem);
				}
			}
			this.rowH=rowH;
			var arrConfig:Array=[arrWidth,[rowH]];
			container=new ContainerT();
			container.init(arrConfig,tableW,rowH);
			//添加标题
			for(var j:Number=0;j<arrTitle.length;j++){
				var btn:CButton=new CButton();
				btn.init(arrTitle[j],false,false);
				container.getOne(0,j).append(btn);
			}
			container.show(this);
			container.update();
			//
			this.isShowBak=isShowBak;
			
			this.tableW=tableW;
			this.tableH=rowH;
			
			if(isShowBak) this.show2RowColor();
		}
		/**
		 * 添加一行 
		 * @param arr 格式：[单元格1元件,单元格2元件,单元格3元件,单元格4元件]  注：数组里的必须是以Base为基类的对象
		 * 
		 */		
		public function addRow(arr:Array):void{
			var arrNowWH:Array=container.getConfigCS();
			
			if(arrNowWH[0].length!=arr.length) throw new Error("所加的项目数不对!应该是"+arrNowWH[0].length+"项");
			
			var arrWH:Array=container.getConfigWH();
			arrWH[1].push(this.rowH);
			//表格容器新增一行
			var arrNewRow:Array=new Array();
			for(var i:Number=0;i<arr.length;i++){
				var cs:ContainerS=new ContainerS();
				cs.show(container);
				cs.append(arr[i])
				arrNewRow.push(cs);
			}
			arrNowWH.push(arrNewRow);
			container.update();
			
			this.tableH+=rowH;
			//
			updateBak()
		}
		/**
		 * 添加一文本行 
		 * @param arr 格式：["内容1","内容2","内容3"....] 注：数组里的必须是以字符串类型
		 * @param arrFomat 格式：[TextFormat1,TextFormat2,TextFormat3...]
		 * 
		 */
		public function addRowTxt(arr:Array,arrFomat:Array=null):void{
			if(arrFomat!=null){
				if(arr.length!=arrFomat.length) throw new Error("TextFormat数量不对");
			}else{
				arrFomat=new Array();
				for(var j:Number=0;j<arr.length;j++){
					arrFomat.push(CTextField.getTextFormat(1,0x000000,13));
				}
			}
			var arrTem:Array=new Array();
			for(var i:Number=0;i<arr.length;i++){
				var txt:CTextField=new CTextField();
				txt.init(arr[i]);
				txt.setAutoSize(0);
				//txt.showBodor()
				txt.setTextFormat(arrFomat[0]);
				txt.text=txt.text;
				//txt.showGuide();
				arrTem.push(txt);
			}
			this.addRow(arrTem);
		}
		/**
		 * 设置背景
		 *
		 */			
		public function setBak(way:uint,type:uint,config:Object):void{
			clrBak()
			objBakConfig={way:way,type:type,config:config}
			bakRender=new CRender();
			bakRender.init(way,type,config,this.getShowWidth(),this.getShowHeight());
			bakRender.show(this);
			this.swapChildren(container,bakRender);
		}
		/**
		 * 设置奇偶色块背景 
		 * @param color1 奇色块色
		 * @param alpha1 奇色块透明度
		 * @param color2 偶色块色
		 * @param alpha2 偶色块透明度
		 * 
		 */		
		public function show2RowColor(color1:Number=0xffffff,alpha1:Number=1,color2:Number=0xcccccc,alpha2:Number=1):void{
			var obj:Object={w:getShowWidth(),h:rowH,spacex:0,spacey:0,color:color1,alpha:alpha1,color1:color2,alpha1:alpha2};
			objBakConfig={way:1,type:2,config:obj}
			setBak(1,3,obj);
		}
		/**
		 * 设置一个色块的背景
		 * @param c 颜色
		 * @param a 透明度
		 * 
		 */		
		public function setBakColor(c:Number=0xffffff,a:Number=0.5,isBitmap:Boolean=false):void{
			var obj:Object={color:c,alpha:a,isBitmap:isBitmap}
			objBakConfig={way:0,type:0,config:obj}
			setBak(0,0,obj);
		}
		/**
		 * 更新背景 
		 * 
		 */		
		private function updateBak():void{
			//trace(getShowWidth()+"  "+getShowHeight());
			if(bakRender!=null) bakRender.setWH(getShowWidth(),getShowHeight())
		}
		/**
		 * 清除背景 
		 * @return 
		 * 
		 */		
		public function clrBak():void{
			if(bakRender!=null) this.removeChild(bakRender);
			isShowBak=false;
		}
		
		override public function setWH(w:Number=0, h:Number=0):void{
			container.setWH(w,container.getShowHeight())
		}
		
		override public function getShowWidth():Number{
			return tableW
		}
		override public function getShowHeight():Number{
			return tableH;
		}
	}
}